const express = require('express');
const router = express.Router();
const { User } = require('../../models');
const { success, error } = require('../../utils/response');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const { Op } = require('sequelize');

const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key';  // 建议使用环境变量

/**
 * @api {post} /auth/login 用户登录
 * @apiGroup Auth
 * @apiVersion 1.0.0
 * @apiDescription 用户登录接口
 * 
 * @apiParam {String} account 账号（可以是用户名或邮箱）
 * @apiParam {String} password 密码
 */
router.post('/login', async (req, res) => {
    try {
        const { account, password } = req.body;  // account 可以是用户名或邮箱

        // 参数验证
        if (!account || !password) {
            return res.json(error('账号和密码不能为空', 400));
        }

        console.log('登录请求:', { account, password });

        // 查找用户（支持用户名或邮箱登录）
        const user = await User.findOne({
            where: {
                [Op.or]: [
                    { username: account },
                    { email: account }
                ]
            },
            attributes: ['id', 'username', 'email', 'password', 'role']
        });

        if (!user) {
            return res.json(error('用户不存在', 404));
        }

        console.log('查询到用户:', {
            id: user.id,
            username: user.username,
            email: user.email,
            hasPassword: !!user.password,
            passwordLength: user.password?.length
        });

        // 验证密码
        const isValidPassword = bcrypt.compareSync(password, user.password);
        console.log('密码验证结果:', isValidPassword);

        if (!isValidPassword) {
            return res.json(error('密码错误', 401));
        }

        // 生成 token
        const token = jwt.sign(
            {
                id: user.id,
                username: user.username,
                email: user.email,
                role: user.role
            },
            JWT_SECRET,
            { expiresIn: '24h' }
        );

        // 返回用户信息和 token
        res.json(success({
            id: user.id,
            username: user.username,
            email: user.email,
            role: user.role,
            token
        }, '登录成功'));

    } catch (err) {
        console.error('登录失败:', err);
        res.json(error('登录失败', 500, err.message));
    }
});

/**
 * @api {post} /auth/register 用户注册
 * @apiGroup Auth
 * @apiVersion 1.0.0
 * @apiDescription 用户注册接口
 */
router.post('/register', async (req, res) => {
    try {
        const { username, password, email } = req.body;

        // 参数验证
        if (!username || !password) {
            return res.json(error('用户名和密码不能为空', 400));
        }

        // 检查用户名是否已存在
        const existingUser = await User.findOne({
            where: { username }
        });

        if (existingUser) {
            return res.json(error('用户名已存在', 400));
        }

        // 创建用户（密码加密在模型中自动处理）
        const user = await User.create({
            username,
            password,  // 密码会在模型中自动加密
            email
        });

        // 生成 token
        const token = jwt.sign(
            {
                id: user.id,
                username: user.username,
                role: user.role
            },
            JWT_SECRET,
            { expiresIn: '24h' }
        );

        // 返回用户信息和 token（不返回密码）
        res.json(success({
            id: user.id,
            username: user.username,
            role: user.role,
            token
        }, '注册成功'));

    } catch (err) {
        console.error('注册失败:', err);
        res.json(error('注册失败', 500, err.message));
    }
});

module.exports = router; 